Contents
  1. 1. 使用Frida解密通信数据包并与Burpsuite交互
    1. 1.1. message消息
    2. 1.2. 阻塞等待输入交互
    3. 1.3. burpsuite交互
    4. 1.4. 运行截图

使用Frida解密通信数据包并与Burpsuite交互

分析App时经常遇到网络通信数据包加密的情况,逆向分析后虽然可以写出解密前信息提示或者修改的插件,但是无法动态修改数据包中指定字段,对于其他自动化测试极为不方便。这里可以使用frida编写插件让其与burpsuite进行交互。

message消息

frida中有个消息机制,可以与目标进程中互相发送消息,在python中可注册message回调函数,处理接收与发送消息的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import frida
import codecs

def on_message(message, data):
if message['type'] == 'send':
...
script.post({'type':'returnValue', 'payload': 'value'})

with codecs.open('./agent.js', 'r', 'utf-8') as f:
source = f.read()

session = frida.get_usb_device().attach(pid)
script = session.create(source)
script.on('message', on_message)
script.load()
...

阻塞等待输入交互

在注入的插件脚本中,可使用recv.wait来阻塞进程,等待返回消息

1
2
3
4
5
6
7
8
9
10
Interceptor.attach(....., {
onEnter: function(args) {
send('needValue');
var op = recv('returnValue', function(value) {
args[0] = value.payload;
}
op.wait();
....
}
}

burpsuite交互

通过上面的方法,已经可以完成注入App的数据阻塞等待动态修改了,接着将数据修改来源绑定到burpsuite上
这里可以将python端on_message中收发的消息数据使用http方式发送到burpsuite中,再等待burpsuite中修改后返回的结果。所以python端创建一个简单的http服务器,负责与burpsuite通信即可。
我在这里使用了HTTPServer创建了个本地服务器,监听28080端口,接着负责处理frida的on_message中使用requests模块与burpsuite 28081端口进行http通信,burpsuite proxy模块中设置监听127.0.0.1:28080地址,数据发送到127.0.0.1:28081地址。

运行截图


Contents
  1. 1. 使用Frida解密通信数据包并与Burpsuite交互
    1. 1.1. message消息
    2. 1.2. 阻塞等待输入交互
    3. 1.3. burpsuite交互
    4. 1.4. 运行截图